#include "iostream"
using namespace std;

class AA
{
public:
	AA() //无参构造函数 默认构造函数
	{	
		cout<<"我是构造函数，自动被调用了"<<endl;
	}
	AA(int _a) //有参构造函数 默认构造函数
	{	
		a = _a;
	}
	AA(const AA &obj) //赋值构造函数,也叫拷贝构造函数
	{
		cout<<"我也是构造函数，我是通过另外一个对象obj2，来初始化我自己"<<endl;
		a = obj.a + 10;
	}
	~AA()
	{
		cout<<"我是析构函数，自动被调用了"<<endl;
	}
public:
	void getA()
	{
		printf("a:%d \n", a);
	}
protected:
private:
	int a;
};


int main()
{

	AA a1; //变量定义

	{
		//赋值构造函数的第一个应用场景
		//我用对象1 初始化 对象2 
		AA a2 = a1; //定义变量并初始化
	}
	{
		//赋值构造函数的第一个应用场景
		//我用对象1 初始化 对象2 
		AA a2(a1); //定义变量并初始化
	}
	{
		//AA a2;
		//a2 = a1; //用a1来=号给a2 编译器给我们提供的浅copy
	}

	return 0;
}